<!DOCTYPE html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>模版例示</title>
    <link rel="stylesheet" href="/component/pear/css/pear.css">
    <style>
      pre {
        line-height: 22px;
        background-color: aliceblue;
        padding: 20px;
        margin: 15px 0;
      }

      blockquote {
        margin-top: 15px;
      }
    </style>
</head>
<body style="padding: 20px;">
<h2>1、反向代理</h2>
<blockquote class="layui-elem-quote">
    <p>
        在Nginx中配置反向代理（Reverse Proxy）是指将客户端的请求转发到另一个服务器，并将服务器的响应返回给客户端。下面是一个简单的示例，演示如何配置Nginx作为反向代理
    </p>
</blockquote>
<pre>
server {
    listen 8080;  # 监听的端口
    # server_name example.com;  # 反向代理的目标服务器域名
    server_name _; # 忽略反向代理目标服务器域名

    location / {
        proxy_pass http://127.0.0.1:9512;  # 后端服务器的URL
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
</pre>
<h2>2、配置SSL/HTTPS</h2>
<pre>
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    # 配置HTTPS的默认访问端口为443。
    # 如果未在此处配置HTTPS的默认访问端口，可能会造成Nginx无法启动。
    # 如果您使用Nginx 1.15.0及以上版本，请使用listen 443 ssl代替listen 443和ssl on。
    server_name yourdomain; # 需要将yourdomain替换成证书绑定的域名。
    ssl_certificate /etc/nginx/conf.d/yourdomain.pem;  # 需要将cert-file-name.pem替换成已上传的证书文件的名称。
    ssl_certificate_key /etc/nginx/conf.d/yourdomain.key; # 需要将cert-file-name.key替换成已上传的证书私钥文件的名称。
    ssl_session_timeout 2m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    # 表示使用的加密套件的类型。
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #表示使用的TLS协议的类型。
    ssl_prefer_server_ciphers on;

    # 下面是一个经典的 vue 配置
    location / {
        try_files $uri $uri/ @router;

        root   /usr/myhome-frontend/dist;
        index  index.html;

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Real-Port $remote_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location @router {
        rewrite ^.*$ /index.html last;
    }
}
</pre>

<h2>3、配置IP黑白名单</h2>
<blockquote class="layui-elem-quote">
    <p>
        可以使用deny指令来限制特定IP的访问
    </p>
</blockquote>

<pre>
server {
    listen 80;
    server_name example.com;

    location / {
        deny 192.168.0.1;  # 封禁192.168.0.1这个IP地址
        allow all;  # 允许所有其他IP地址访问
        ...
    }
}
</pre>
<pre>
server {
    listen 80;
    server_name example.com;

    location / {
        allow 192.168.0.1;  # 允许192.168.0.1这个IP地址访问
        allow 192.168.0.0/24;  # 允许整个192.168.0.x网段访问
        deny all;  # 拒绝所有其他IP地址访问
        ...
    }
}
</pre>

<h2>4、配置限流</h2>
<blockquote class="layui-elem-quote">
    <p>
        配置限流可以通过使用limit_req指令来实现。该指令可以限制请求的速率，以防止单个IP地址或用户对服务器造成过大的负载。
    </p>
</blockquote>
<pre>
# 创建一个名为“one”的限流区域，限制每个IP地址每秒只能发出20个请求，最大存储10MB的请求数据
limit_req_zone $binary_remote_addr zone=one:10m rate=20r/s;
server {
    # 端口等配置省略...
    location / {
        # 限制每个IP地址每秒只能发出20个请求，超出限制的请求将被立即返回503响应码，burst=1表示队列为1
        limit_req zone=one burst=1 nodelay;
        ...
    }
}
</pre>
</body>
</html>